﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using CPPaquetes.BusinessLayer;
using CPPaquetes.BusinessEntities;
using System.Text;
using CPPaquetes.Integracion;
using Triarsa.Security.Crypto;
using Triarsa.Security;
using CotizacionPresencialPaquetes.Models;
using CPPaquetes.Infraestructure.Logging;
using System.IO;

namespace CotizacionPresencialPaquetes.Controllers
{
	
	public class HomeController : Controller
	{
		public ActionResult ErrorSession()
		{
			return View();
		}
		public ActionResult Index()
		{
			//LogManager.Instance().Error("Entro al sitio");
			ViewBag.Message = "Sistema de Cotización de Paquetes";
			ViewBag.ParameterData = "";
			string dataParameter = string.Empty;
			try
			{
				if (ContextParameter.GetDataContext(this) == null)
				{
					if (!string.IsNullOrEmpty(this.HttpContext.Request.QueryString["data"]))
					{
						if (this.HttpContext.Request.QueryString["data"] == "DEBUG")
						{
							LogManager.Instance().Error("El sitio ha sido accedido en modo DEBUG");
							dataParameter = "3860|58|lponce|2";
							//Debug Propducción
							//dataParameter = "929|58|lponce|1";
							ContextParameter.SetDataContext(this, dataParameter);
						}
						else
						{
							dataParameter = this.HttpContext.Request.QueryString["data"].ToString();
							//LogManager.Instance().Debug("dataParameter Encriptado=> " + dataParameter);
							EncryptorSSL encryptor = new EncryptorSSL();

							//ViewBag.ParameterData = encryptor.Decrypt(dataParameter, true);
							dataParameter = encryptor.Decrypt(dataParameter, true); //"3860|58|lponce";
							ViewBag.ParameterData = dataParameter;

							string UserName = string.Empty;
							//LogManager.Instance().Debug("dataParameter Desencriptado => " + dataParameter);

							ContextParameter.SetDataContext(this, dataParameter);
							//Obtiene el canal del usuario
							UsuarioPV usu = new UsuarioPV();
							UserName = ContextParameter.GetDataContext(this).Usuario;
							//LogManager.Instance().Debug("UserName -> " + UserName);
							short idCanal = usu.GetIdCanal(UserName);
							dataParameter = dataParameter + "|" + idCanal.ToString();
							ContextParameter.SetDataContext(this, dataParameter);
						}
						//ViewBag.ParameterData = dataParameter;
					}
					else
					{
						return RedirectToAction("ErrorSession");
						//LogManager.Instance().Error("El sitio ha sido accedido sin credenciales");
						//dataParameter = "3860|58|lponce";
						//ContextParameter.SetDataContext(this, dataParameter);
					}
				}
				Destino destino = new Destino();
				var desRes = destino.GetAllDestinations4();
				
				//Información del Menu

				TempData.Add("MenuConfiguration", MenuConfiguration.Read());

				return View(desRes);
			}
			catch (Exception ex)
			{
				LogManager.Instance().Error(ex);
				throw ex;
			}
		}

		private ItemMenu GetItemMenu(string ItemName, List<ItemMenu> itemsMenu)
		{
			//List<ItemMenu> itemsMenu = MenuConfiguration.Read();
			ItemMenu itemmenu = null;
			foreach (ItemMenu itm in itemsMenu)
			{
				if (itm.ItemName == ItemName)
				{
					itemmenu = itm;
					break;
				}
				else if (itm.SubMenu != null && itm.SubMenu.Count > 0)
				{
					itemmenu = itm.SubMenu.Where<ItemMenu>(x => x.ItemName == ItemName).FirstOrDefault();
					if (itemmenu != null)
						break;
				}
			}

			return itemmenu;
		}
				
		public ActionResult Opcion(string ItemName)
		{
			ViewBag.Message = "Sistema de Cotización de Paquetes";
			List<ItemMenu> itemsMenu = MenuConfiguration.Read();
			ItemMenu itemmenu = null;

			itemmenu = GetItemMenu(ItemName, itemsMenu);

			string PathFile = itemmenu.PathFile;
			Destino destino = new Destino();
			List<DestinosPath> destinosPath = new List<DestinosPath>();

			destinosPath = destino.GetDestinationByPath(PathFile, ItemName);
			TempData.Add("MenuConfiguration", itemsMenu);
			return View(destinosPath);
		}

		public ActionResult MenuLateral()
		{
			Destino destino = new Destino();
			var desRes = destino.GetAllDestinations2();

			return PartialView(desRes);
		}

		public ActionResult ArbolProgramas(int? Id)
		{
			Destino destino = new Destino();

			List<ProgramaDestino> ProgramaDestinos = destino.GetProgramasDestino(Id);

			return PartialView(ProgramaDestinos);
		}

		public ActionResult ShowPrograma(int? Id)
		{
			Programa programa = new Programa();
			
			ProgramaInfo programaInfo =  programa.GetProgramaInfoById(Id) ;

			return View(programaInfo);
		}

		public ActionResult CotizacionWord(int? Id)
		{            
			string url = Url.Content("~/Home/ShowProgramaWord?Id=" + Id.ToString());
			string ParameterData = string.Empty;            
			
			Uri requestUrl = Url.RequestContext.HttpContext.Request.Url;

			
			string absoluteUrl = string.Format("{0}://{1}{2}",
												  requestUrl.Scheme,
												  requestUrl.Authority,
												  url);
			
			return new WordActionResult(absoluteUrl, "cotizacion.doc");
		}
				
		public void ShowProgramaWord(int? Id, string NOMBRE, string TELEFONO, string MAIL, string NUMERONEGOCIO)
		{

			Programa programa = new Programa();
			ProgramaInfo programaInfo = programa.GetProgramaInfoById(Id);

			

			//string url = Url.Content("~/Home/ShowProgramaWord?Id=" + Id.ToString());

			System.Text.StringBuilder strBody = new System.Text.StringBuilder("");


			#region Inicio
			strBody.Append("<html xmlns:o='urn:schemas-microsoft-com:office:office'");
			strBody.Append("xmlns:w='urn:schemas-microsoft-com:office:word'");
			strBody.Append("xmlns='http://www.w3.org/TR/REC-html40'>");
			strBody.Append("<head><title>Time</title>");

			//The setting specifies document's view after it is downloaded as Print
			//instead of the default Web Layout
			strBody.Append("<!--[if gte mso 9]>");
			strBody.Append("<xml>");
			strBody.Append("<w:WordDocument>");
			strBody.Append("<w:View>Print</w:View>");
			strBody.Append("<w:Zoom>100</w:Zoom>");
			strBody.Append("<w:DoNotOptimizeForBrowser/>");
			strBody.Append("</w:WordDocument>");
			strBody.Append("</xml>");
			strBody.Append("<![endif]-->");
			#endregion

			#region Estilo
			strBody.Append("<style>");
			strBody.Append("<!-- /* Style Definitions */");
			strBody.Append("p.MsoFooter, li.MsoFooter, div.MsoFooter");
			strBody.Append("{margin:0in;");
			strBody.Append("margin-bottom:.0001pt;");
			strBody.Append("mso-pagination:widow-orphan;");
			strBody.Append("tab-stops:center 3.0in right 6.0in;");
			strBody.Append("font-size:12.0pt;}");
			strBody.Append("p.MsoHeader, li.MsoHeader, div.MsoHeader");
			strBody.Append("{margin:0in;");
			strBody.Append("margin-bottom:.0001pt;");
			strBody.Append("mso-pagination:widow-orphan;");
			strBody.Append("tab-stops:center 3.0in right 6.0in;");
			strBody.Append("font-size:12.0pt;}");
			strBody.Append("@page Section1");
			strBody.Append("   {size:8.5in 11.0in; ");
			strBody.Append("   margin:1.5in 0.6in 2in 0.6in ; ");
			strBody.Append("   mso-header: h1;");
			strBody.Append("   mso-header-margin:.5in; ");
			strBody.Append("   mso-footer: f1;");
			strBody.Append("   mso-footer-margin:.5in; mso-paper-source:0;}");
			strBody.Append(" div.Section1");
			strBody.Append("   {page:Section1;");
			strBody.Append("font-size:10.0pt;font-family:\"Times New Roman\";mso-fareast-font-family:\"Times New Roman\";");
			strBody.Append(" }");
			strBody.Append("-->");
			strBody.Append("</style></head>");
			#endregion

			#region Cabecera
			strBody.Append("<body lang=EN-US style='tab-interval:.5in'>");
			strBody.Append("<div class=Section1>");
			strBody.Append("<img src='http://www.viajesfalabella.cl/dnn/Portals/_default/Skins/viajes/img/lgt/logo.jpg' />");

			strBody.Append("<br />");
			strBody.Append("<br />");
			strBody.Append("<h2>");
			strBody.Append(Server.HtmlEncode("N° de Negocio : " + NUMERONEGOCIO));
			strBody.Append("</h2>");

			strBody.Append("<img src='");
			strBody.Append(programaInfo.IMAGEN.IMAGEN_CABECERA);
			strBody.Append("' />");
			strBody.Append("<br />");

			strBody.Append("<h2>");
			strBody.Append(Server.HtmlEncode(programaInfo.PROGRAMA.NOMBRE));
			strBody.Append("</h2>");
			strBody.Append("<h4>");
			strBody.Append(programaInfo.PROGRAMA.NRO_DIAS.ToString());
			strBody.Append("d&iacute;as / ");
			strBody.Append(programaInfo.PROGRAMA.NRO_NOCHES.ToString());
			strBody.Append(" noches</h4>");

			strBody.Append(Server.HtmlEncode(programaInfo.PROGRAMA.GLOSA_ATRIBUTO_PROGRAMA));
			#endregion

			#region Paquete incluye
			strBody.Append("<h3>Paquete incluye:</h3>");

			strBody.Append("<ul>");
			foreach (var item in programaInfo.INCLUYE)
			{
				strBody.Append("<li>");
				strBody.Append(Server.HtmlEncode(item.GLOSA));
				strBody.Append("</li>");
			}
			strBody.Append("</ul>");

			#endregion

			#region Precio no incluye
			strBody.Append("<h3>Precio no incluye:</h3>");
			if (programaInfo.PROGRAMA.COMISION_FEE1_ST == "NO" && programaInfo.PROGRAMA.COMISION_FEE1 > 0)
			{
				strBody.Append("<p>Comisi&oacute;n de agencia, los que ascienden a <b>");
				strBody.Append(Convert.ToInt32(programaInfo.PROGRAMA.COMISION_FEE1).ToString("#,##0"));
				strBody.Append("</b> por persona en programas " + (programaInfo.PROGRAMA.DESTINO_PROGRAMA == "N" ? "nacionales." : "internacionales" ) + "</p>");
			}
			#endregion

			#region Alternativas de fechas, hoteles y precios

			strBody.Append("<h3>Alternativas de fechas, hoteles y precios</h3>");
			strBody.Append("Precios por persona. ");
			strBody.Append(programaInfo.PROGRAMA.TIPO_MONEDA);
			strBody.Append(" - ");
			strBody.Append(Server.HtmlEncode(programaInfo.PROGRAMA.GLOSA_VALIDEZ));
			if (programaInfo.PROGRAMA.FECHA_VENTA_HASTA.HasValue)
				strBody.Append(string.Format("{0:d}", programaInfo.PROGRAMA.FECHA_VENTA_HASTA.Value));
			strBody.Append("<br />");
			strBody.Append("<br />");

			if (!programaInfo.TIENE_HOSPEDAJE_HTML)
			{
				strBody.Append("<table cellspacing=\"0\" style=\"padding:6px\" >");
				strBody.Append("<thead>");

				#region Valores noches normales
				
				// Celdas del encabezado
				strBody.Append(CeldaTablaEncebezado("Hotel", false));
				strBody.Append(CeldaTablaEncebezado("Vigencias", false));

				if (programaInfo.HOSPEDAJE_COLS.show_valor_single)
				{
					strBody.Append(CeldaTablaEncebezado(Server.HtmlEncode(programaInfo.HOSPEDAJE_COLS.titulo1)
						, !programaInfo.HOSPEDAJE_COLS.show_valor_doble
						&& !programaInfo.HOSPEDAJE_COLS.show_valor_triple
						&& !programaInfo.HOSPEDAJE_COLS.show_valor_cuadruple
						&& !programaInfo.HOSPEDAJE_COLS.show_valor_quintuple
						&& !programaInfo.HOSPEDAJE_COLS.show_valor_sextuple
						&& !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
				}
				if (programaInfo.HOSPEDAJE_COLS.show_valor_doble)
				{
					strBody.Append(CeldaTablaEncebezado(Server.HtmlEncode(programaInfo.HOSPEDAJE_COLS.titulo2)
						, !programaInfo.HOSPEDAJE_COLS.show_valor_triple
						&& !programaInfo.HOSPEDAJE_COLS.show_valor_cuadruple
						&& !programaInfo.HOSPEDAJE_COLS.show_valor_quintuple
						&& !programaInfo.HOSPEDAJE_COLS.show_valor_sextuple
						&& !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
				}
				if (programaInfo.HOSPEDAJE_COLS.show_valor_triple)
				{
					strBody.Append(CeldaTablaEncebezado(Server.HtmlEncode(programaInfo.HOSPEDAJE_COLS.titulo3)
										, !programaInfo.HOSPEDAJE_COLS.show_valor_cuadruple
										&& !programaInfo.HOSPEDAJE_COLS.show_valor_quintuple
										&& !programaInfo.HOSPEDAJE_COLS.show_valor_sextuple
										&& !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
				}
				if (programaInfo.HOSPEDAJE_COLS.show_valor_cuadruple)
				{
					strBody.Append(CeldaTablaEncebezado(Server.HtmlEncode(programaInfo.HOSPEDAJE_COLS.titulo4)
										, !programaInfo.HOSPEDAJE_COLS.show_valor_quintuple
										&& !programaInfo.HOSPEDAJE_COLS.show_valor_sextuple
										&& !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
				}
				if (programaInfo.HOSPEDAJE_COLS.show_valor_quintuple)
				{
					strBody.Append(CeldaTablaEncebezado(Server.HtmlEncode(programaInfo.HOSPEDAJE_COLS.titulo5)
										, !programaInfo.HOSPEDAJE_COLS.show_valor_sextuple
										&& !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
				}
				if (programaInfo.HOSPEDAJE_COLS.show_valor_sextuple)
				{
					strBody.Append(CeldaTablaEncebezado(Server.HtmlEncode(programaInfo.HOSPEDAJE_COLS.titulo6)
						, !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
				}
				if (programaInfo.HOSPEDAJE_COLS.show_valor_ninyos)
				{
					strBody.Append(CeldaTablaEncebezado(Server.HtmlEncode(programaInfo.HOSPEDAJE_COLS.titulo7), true));

				}
				strBody.Append("</thead>");

				foreach (CPPaquetes.BusinessEntities.HospedajeInfo item in programaInfo.HOSPEDAJE)
				{
					strBody.Append("<tr>");
					if (item.HotelShow)
					{
						string nombreHospedaje = string.Empty;
						if (!string.IsNullOrEmpty(item.Categoria.Trim()) && item.Categoria != "0")
						{
							if (!string.IsNullOrEmpty(item.Atributo_Categoria.Trim()))
							{
								nombreHospedaje = item.Nombre + "(" + item.Categoria + "* " + item.Atributo_Categoria + ")";
							}
							else
							{
								nombreHospedaje = item.Nombre + "(" + item.Categoria + "* )";
							}
						}
						else { nombreHospedaje = item.Nombre; }

						strBody.Append(CeldaTablaDetalle(Server.HtmlEncode(nombreHospedaje), item.HotelSpan, false));
						//strBody.Append(CeldaTablaDetalle(Server.HtmlEncode(item.Nombre), item.HotelSpan, false));

					}

					strBody.Append(CeldaTablaDetalle(Server.HtmlEncode(item.Vigencia), 0, false));

					if (programaInfo.HOSPEDAJE_COLS.show_valor_single)
					{
						strBody.Append(CeldaTablaDetalle(Server.HtmlEncode(item.valor_single == 0 ? "" : item.valor_single.ToString("#,##0"))
							, 0
							, !programaInfo.HOSPEDAJE_COLS.show_valor_doble
							&& !programaInfo.HOSPEDAJE_COLS.show_valor_triple
							&& !programaInfo.HOSPEDAJE_COLS.show_valor_cuadruple
							&& !programaInfo.HOSPEDAJE_COLS.show_valor_quintuple
							&& !programaInfo.HOSPEDAJE_COLS.show_valor_sextuple
							&& !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
					}
					if (programaInfo.HOSPEDAJE_COLS.show_valor_doble)
					{
						strBody.Append(CeldaTablaDetalle(Server.HtmlEncode(item.valor_doble == 0 ? "" : item.valor_doble.ToString("#,##0"))
							, 0
							, !programaInfo.HOSPEDAJE_COLS.show_valor_triple
							&& !programaInfo.HOSPEDAJE_COLS.show_valor_cuadruple
							&& !programaInfo.HOSPEDAJE_COLS.show_valor_quintuple
							&& !programaInfo.HOSPEDAJE_COLS.show_valor_sextuple
							&& !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
					}
					if (programaInfo.HOSPEDAJE_COLS.show_valor_triple)
					{
						strBody.Append(CeldaTablaDetalle(Server.HtmlEncode(item.valor_triple == 0 ? "" : item.valor_triple.ToString("#,##0"))
							, 0
							, !programaInfo.HOSPEDAJE_COLS.show_valor_cuadruple
							&& !programaInfo.HOSPEDAJE_COLS.show_valor_quintuple
							&& !programaInfo.HOSPEDAJE_COLS.show_valor_sextuple
							&& !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
					}
					if (programaInfo.HOSPEDAJE_COLS.show_valor_cuadruple)
					{
						strBody.Append(CeldaTablaDetalle(Server.HtmlEncode(item.valor_cuadruple == 0 ? "" : item.valor_cuadruple.ToString("#,##0"))
							, 0
							, !programaInfo.HOSPEDAJE_COLS.show_valor_quintuple
							&& !programaInfo.HOSPEDAJE_COLS.show_valor_sextuple
							&& !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
					}
					if (programaInfo.HOSPEDAJE_COLS.show_valor_quintuple)
					{
						strBody.Append(CeldaTablaDetalle(Server.HtmlEncode(item.valor_quintuple == 0 ? "" : item.valor_quintuple.ToString("#,##0"))
							, 0
							, !programaInfo.HOSPEDAJE_COLS.show_valor_sextuple
							&& !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
					}
					if (programaInfo.HOSPEDAJE_COLS.show_valor_sextuple)
					{
						strBody.Append(CeldaTablaDetalle(Server.HtmlEncode(item.valor_sextuple == 0 ? "" : item.valor_sextuple.ToString("#,##0"))
							, 0
							, !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
					}
					if (programaInfo.HOSPEDAJE_COLS.show_valor_ninyos)
					{
						strBody.Append(CeldaTablaDetalle(Server.HtmlEncode(item.valor_ninyos == 0 ? "" : item.valor_ninyos.ToString("#,##0"))
							, 0
							, true));
					}

					strBody.Append("</tr>");
				}				

				#endregion

				strBody.Append("</table>");

				if (programaInfo.HOSPEDAJE_ADICIONAL.Count > 0)
				{
					strBody.Append("<br />");
					strBody.Append("<br />");

					strBody.Append("<h3>Valores de Noches adicionales</h3>");
					strBody.Append("<br />");
					strBody.Append("<br />");
					strBody.Append("<table cellspacing=\"0\" style=\"padding:6px\" >");
					strBody.Append("<thead>");

					#region Valores noches adicionales

					// Celdas del encabezado
					strBody.Append(CeldaTablaEncebezado("Hotel", false));
					strBody.Append(CeldaTablaEncebezado("Vigencias", false));

					if (programaInfo.HOSPEDAJE_COLS.show_valor_single)
					{
						strBody.Append(CeldaTablaEncebezado(Server.HtmlEncode(programaInfo.HOSPEDAJE_COLS.titulo1)
							, !programaInfo.HOSPEDAJE_COLS.show_valor_doble
							&& !programaInfo.HOSPEDAJE_COLS.show_valor_triple
							&& !programaInfo.HOSPEDAJE_COLS.show_valor_cuadruple
							&& !programaInfo.HOSPEDAJE_COLS.show_valor_quintuple
							&& !programaInfo.HOSPEDAJE_COLS.show_valor_sextuple
							&& !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
					}
					if (programaInfo.HOSPEDAJE_COLS.show_valor_doble)
					{
						strBody.Append(CeldaTablaEncebezado(Server.HtmlEncode(programaInfo.HOSPEDAJE_COLS.titulo2)
							, !programaInfo.HOSPEDAJE_COLS.show_valor_triple
							&& !programaInfo.HOSPEDAJE_COLS.show_valor_cuadruple
							&& !programaInfo.HOSPEDAJE_COLS.show_valor_quintuple
							&& !programaInfo.HOSPEDAJE_COLS.show_valor_sextuple
							&& !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
					}
					if (programaInfo.HOSPEDAJE_COLS.show_valor_triple)
					{
						strBody.Append(CeldaTablaEncebezado(Server.HtmlEncode(programaInfo.HOSPEDAJE_COLS.titulo3)
											, !programaInfo.HOSPEDAJE_COLS.show_valor_cuadruple
											&& !programaInfo.HOSPEDAJE_COLS.show_valor_quintuple
											&& !programaInfo.HOSPEDAJE_COLS.show_valor_sextuple
											&& !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
					}
					if (programaInfo.HOSPEDAJE_COLS.show_valor_cuadruple)
					{
						strBody.Append(CeldaTablaEncebezado(Server.HtmlEncode(programaInfo.HOSPEDAJE_COLS.titulo4)
											, !programaInfo.HOSPEDAJE_COLS.show_valor_quintuple
											&& !programaInfo.HOSPEDAJE_COLS.show_valor_sextuple
											&& !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
					}
					if (programaInfo.HOSPEDAJE_COLS.show_valor_quintuple)
					{
						strBody.Append(CeldaTablaEncebezado(Server.HtmlEncode(programaInfo.HOSPEDAJE_COLS.titulo5)
											, !programaInfo.HOSPEDAJE_COLS.show_valor_sextuple
											&& !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
					}
					if (programaInfo.HOSPEDAJE_COLS.show_valor_sextuple)
					{
						strBody.Append(CeldaTablaEncebezado(Server.HtmlEncode(programaInfo.HOSPEDAJE_COLS.titulo6)
							, !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
					}
					if (programaInfo.HOSPEDAJE_COLS.show_valor_ninyos)
					{
						strBody.Append(CeldaTablaEncebezado(Server.HtmlEncode(programaInfo.HOSPEDAJE_COLS.titulo7), true));

					}
					strBody.Append("</thead>");

					foreach (CPPaquetes.BusinessEntities.HospedajeInfo item in programaInfo.HOSPEDAJE_ADICIONAL)
					{
						strBody.Append("<tr>");
						if (item.HotelShow)
						{
							string nombreHospedaje = string.Empty;
							if (!string.IsNullOrEmpty(item.Categoria.Trim()) && item.Categoria != "0")
							{
								if (!string.IsNullOrEmpty(item.Atributo_Categoria.Trim()))
								{
									nombreHospedaje = item.Nombre + "(" + item.Categoria + "* " + item.Atributo_Categoria + ")";
								}
								else
								{
									nombreHospedaje = item.Nombre + "(" + item.Categoria + "* )";
								}
							}
							else { nombreHospedaje = item.Nombre; }
							strBody.Append(CeldaTablaDetalle(Server.HtmlEncode(nombreHospedaje), item.HotelSpan, false));

						}

						strBody.Append(CeldaTablaDetalle(Server.HtmlEncode(item.Vigencia), 0, false));

						if (programaInfo.HOSPEDAJE_COLS.show_valor_single)
						{
							strBody.Append(CeldaTablaDetalle(Server.HtmlEncode(item.valor_single == 0 ? "" : item.valor_single.ToString("#,##0"))
								, 0
								, !programaInfo.HOSPEDAJE_COLS.show_valor_doble
								&& !programaInfo.HOSPEDAJE_COLS.show_valor_triple
								&& !programaInfo.HOSPEDAJE_COLS.show_valor_cuadruple
								&& !programaInfo.HOSPEDAJE_COLS.show_valor_quintuple
								&& !programaInfo.HOSPEDAJE_COLS.show_valor_sextuple
								&& !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
						}
						if (programaInfo.HOSPEDAJE_COLS.show_valor_doble)
						{
							strBody.Append(CeldaTablaDetalle(Server.HtmlEncode(item.valor_doble == 0 ? "" : item.valor_doble.ToString("#,##0"))
								, 0
								, !programaInfo.HOSPEDAJE_COLS.show_valor_triple
								&& !programaInfo.HOSPEDAJE_COLS.show_valor_cuadruple
								&& !programaInfo.HOSPEDAJE_COLS.show_valor_quintuple
								&& !programaInfo.HOSPEDAJE_COLS.show_valor_sextuple
								&& !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
						}
						if (programaInfo.HOSPEDAJE_COLS.show_valor_triple)
						{
							strBody.Append(CeldaTablaDetalle(Server.HtmlEncode(item.valor_triple == 0 ? "" : item.valor_triple.ToString("#,##0"))
								, 0
								, !programaInfo.HOSPEDAJE_COLS.show_valor_cuadruple
								&& !programaInfo.HOSPEDAJE_COLS.show_valor_quintuple
								&& !programaInfo.HOSPEDAJE_COLS.show_valor_sextuple
								&& !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
						}
						if (programaInfo.HOSPEDAJE_COLS.show_valor_cuadruple)
						{
							strBody.Append(CeldaTablaDetalle(Server.HtmlEncode(item.valor_cuadruple == 0 ? "" : item.valor_cuadruple.ToString("#,##0"))
								, 0
								, !programaInfo.HOSPEDAJE_COLS.show_valor_quintuple
								&& !programaInfo.HOSPEDAJE_COLS.show_valor_sextuple
								&& !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
						}
						if (programaInfo.HOSPEDAJE_COLS.show_valor_quintuple)
						{
							strBody.Append(CeldaTablaDetalle(Server.HtmlEncode(item.valor_quintuple == 0 ? "" : item.valor_quintuple.ToString("#,##0"))
								, 0
								, !programaInfo.HOSPEDAJE_COLS.show_valor_sextuple
								&& !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
						}
						if (programaInfo.HOSPEDAJE_COLS.show_valor_sextuple)
						{
							strBody.Append(CeldaTablaDetalle(Server.HtmlEncode(item.valor_sextuple == 0 ? "" : item.valor_sextuple.ToString("#,##0"))
								, 0
								, !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
						}
						if (programaInfo.HOSPEDAJE_COLS.show_valor_ninyos)
						{
							strBody.Append(CeldaTablaDetalle(Server.HtmlEncode(item.valor_ninyos == 0 ? "" : item.valor_ninyos.ToString("#,##0"))
								, 0
								, true));
						}

						strBody.Append("</tr>");
					}
					strBody.Append("</table>");

					#endregion

					strBody.Append("</table>");
				}
			}
			else
			{
				strBody.Append("<div>");
				strBody.Append(HtmlHelper.EncodeTildes(programaInfo.HOSPEDAJE_HTML));
				strBody.Append("</div>");
			}

			#endregion
			#region TIENE_AEREO
			if (programaInfo.TIENE_AEREO)
			{
				strBody.Append("<div class=\"box_excluye\">");
				strBody.Append("<table cellspacing=\"0\" style=\"padding:6px;width:100%\" >");
				strBody.Append("<thead>");
				strBody.Append(CeldaTablaEncebezado("Valor Terrestre", false));
				strBody.Append(CeldaTablaEncebezado("Valor A&eacute;reo", false));
				strBody.Append(CeldaTablaEncebezado("Q", false));
				strBody.Append(CeldaTablaEncebezado("Tasa", true));
				strBody.Append("</thead>");
				strBody.Append("<tr>");
				strBody.Append(CeldaTablaDetalle(Server.HtmlEncode(programaInfo.PROGRAMA.VALOR_TERRESTRE.ToString()), 0, false));
				strBody.Append(CeldaTablaDetalle(Server.HtmlEncode(programaInfo.PROGRAMA.VALOR_CONTADO_DESDE.ToString()), 0, false));
				strBody.Append(CeldaTablaDetalle(Server.HtmlEncode(programaInfo.PROGRAMA.Q.ToString()), 0, false));
				strBody.Append(CeldaTablaDetalle(Server.HtmlEncode(programaInfo.PROGRAMA.TASA.ToString()), 0, true));
				strBody.Append("</tr>");
				strBody.Append("</table>");
				strBody.Append("</div>");
			}
			#endregion
			#region TIENE_CUADRO_VARIABLE
			if (programaInfo.TIENE_CUADRO_VARIABLE)
			{
				int ultCol = 0;
				strBody.Append("<br />");
				strBody.Append("<div class=\"box_excluye\" >");
				strBody.Append("<table id=\"ancla_variable\" cellspacing=\"0\" style=\"padding:6px;width:100%\" border=\"0\">");
				if (programaInfo.CUADRO_VARIABLE.NRO_COLUMNAS > 1)
				{
					strBody.Append("<thead>");
					for (int col = 1; col <= programaInfo.CUADRO_VARIABLE.NRO_COLUMNAS; col++)
					{
						var fila_col = 1 * 10 + col;
						CPPaquetes.BusinessEntities.TBL_DETALLE_CUADRO_VARIABLE
							detalle = programaInfo.CUADRO_VARIABLE.TBL_DETALLE_CUADRO_VARIABLE.Where(x => x.FILA_COLUMNA_ID == fila_col).FirstOrDefault();
						if (detalle != null)
						{
							ultCol = col;
						}
					}
					for (int col = 1; col <= programaInfo.CUADRO_VARIABLE.NRO_COLUMNAS; col++)
					{
						var fila_col = 1 * 10 + col;
						CPPaquetes.BusinessEntities.TBL_DETALLE_CUADRO_VARIABLE
							detalle = programaInfo.CUADRO_VARIABLE.TBL_DETALLE_CUADRO_VARIABLE.Where(x => x.FILA_COLUMNA_ID == fila_col).FirstOrDefault();
						if (detalle != null)
						{
							strBody.Append(CeldaTablaEncebezado(detalle.VALOR == "" ? " " : HtmlHelper.EncodeTildes(detalle.VALOR), (col == ultCol)));
						}
					}
					strBody.Append("</thead>");
				}
				bool filaBlanco = false;
				for (int row = 2; row <= programaInfo.CUADRO_VARIABLE.NRO_FILAS; row++)
				{
					filaBlanco = true;
					for (int col = 1; col <= programaInfo.CUADRO_VARIABLE.NRO_COLUMNAS; col++)
					{
						var fila_col = row * 10 + col;
						CPPaquetes.BusinessEntities.TBL_DETALLE_CUADRO_VARIABLE detalle = programaInfo.CUADRO_VARIABLE.TBL_DETALLE_CUADRO_VARIABLE.Where(x => x.FILA_COLUMNA_ID == fila_col).FirstOrDefault();
						if (detalle != null && detalle.VALOR != "")
						{
							filaBlanco = false;
						}
					}
					if (!filaBlanco)
					{
						strBody.Append("<tr style='background-color:(row % 2 == 0 ? \"White\" : \"#e7e7e7\")'>");
						for (int col = 1; col <= programaInfo.CUADRO_VARIABLE.NRO_COLUMNAS; col++)
						{
							var fila_col = row * 10 + col;
							CPPaquetes.BusinessEntities.TBL_DETALLE_CUADRO_VARIABLE detalle = programaInfo.CUADRO_VARIABLE.TBL_DETALLE_CUADRO_VARIABLE.Where(x => x.FILA_COLUMNA_ID == fila_col).FirstOrDefault();
							if (detalle != null)
							{
								strBody.Append(CeldaTablaDetalle(detalle.VALOR == "" ? " " : HtmlHelper.EncodeTildes(detalle.VALOR), 0, (col == ultCol)));
							}
						}
						strBody.Append("</tr>");
					}
				}
				strBody.Append("</table>");
				strBody.Append("</div>");
			}
			#endregion

			#region Condiciones Generales de este programa
			strBody.Append("<h3>Condiciones Generales de este programa</h3>");
			strBody.Append("<ul>");

			foreach (CPPaquetes.BusinessEntities.ProgramaInfoNota item in programaInfo.NOTAS)
			{
				strBody.Append("<li>");
				if (item.DESTACADO)
				{
					strBody.Append("<b>");
					strBody.Append(HtmlHelper.EncodeTildes(item.GLOSA));
					strBody.Append("</b>");
				}
				else
				{
					strBody.Append(HtmlHelper.EncodeTildes(item.GLOSA));
				}
				strBody.Append("</li>");
			}
			strBody.Append("</ul>");
			#endregion

			#region Header
			//strBody.Append("<div style='mso-element:header' id=h1>");
			//strBody.Append(" <p class=MsoHeader>");
			//strBody.Append("<table class=\"style1\" width=\"710\" ID=\"TableHeader\" frame=\"box\" border=\"1\" >");
			//strBody.Append("<tr>");
			//strBody.Append("<td align=\"center\">");
			//strBody.Append("<span style=\"font-size: 20pt; font-weight: bold\" >uno</span>");
			//strBody.Append("<br />");
			//strBody.Append("<span style=\"font-size: 16pt; font-weight: bold\" >dos</span>");
			//strBody.Append("<br />");
			//strBody.Append("tres");
			//strBody.Append("</td>");
			//strBody.Append("<td align=\"center\" valign=\"top\">");
			//strBody.Append("<span style=\"font-size: 16pt; font-weight: bold\" >cuatro</span>");
			//strBody.Append("<br />");
			//strBody.Append("<br />");
			//strBody.Append("<span style=\"font-size: 16pt; font-weight: bold\" >cinco</span>");
			//strBody.Append("</td>");
			//strBody.Append("</tr>");
			//strBody.Append("</table>");
			//strBody.Append("<p style=\"font-size: 24pt; font-weight: bold\" > <span style='mso-tab-count:5'></span>seis</p>");
			//strBody.Append("<hr size=1 width=\"100%\" align=center>");
			//strBody.Append(" </p></div>");

			#endregion


			strBody.Append("</div></body></html>");

			//Force this content to be downloaded 
			//as a Word document with the name of your choice
			Response.AppendHeader("Content-Type", "application/msword");
			Response.AppendHeader("Content-disposition", "attachment; filename=cotizacion_viajes_falabella.doc");
			Response.Write(strBody);
		}

		#region ShowProgramaWord ANTIGUO
		//public void ShowProgramaWord(int? Id)
		//{
			
		//    Programa programa = new Programa();
		//    ProgramaInfo programaInfo = programa.GetProgramaInfoById(Id);

		//    //int IdVendedor = 0;
		//    //string Vendedor = "";
		//    string Telefono = "Sin Info";
		//    string Email = "";
		//    string Moneda = "C";//programaInfo.PROGRAMA.TIPO_MONEDA;
		//    string DescripcionServicio = programaInfo.PROGRAMA.PROGRAMA_ID.ToString() + " - " + programaInfo.PROGRAMA.NOMBRE;
		//    int Numero = 0;

			
		//    try
		//    {
		//        DispatcherHandler dispatcherHandler = new DispatcherHandler();

		//        if (Id.HasValue)
		//        {
		//            ContextParameter context = ContextParameter.GetDataContext();
		//            Numero = dispatcherHandler.CrearNegocio(context.IdSucursal
		//                        , context.IdVendedor
		//                        , context.Usuario, Telefono, Email, Moneda, DescripcionServicio);
										
		//        }
		//    }
		//    catch (Exception ex)
		//    {
		//        LogManager.Instance().Error(ex);

		//        //Response.Write(ex.Message);
		//        //return;
		//        //throw ex;
		//    }
			
			
		//    //string url = Url.Content("~/Home/ShowProgramaWord?Id=" + Id.ToString());

		//    System.Text.StringBuilder strBody = new System.Text.StringBuilder("");


		//    #region Inicio
		//    strBody.Append("<html xmlns:o='urn:schemas-microsoft-com:office:office'");
		//    strBody.Append("xmlns:w='urn:schemas-microsoft-com:office:word'");
		//    strBody.Append("xmlns='http://www.w3.org/TR/REC-html40'>");
		//    strBody.Append("<head><title>Time</title>");

		//    //The setting specifies document's view after it is downloaded as Print
		//    //instead of the default Web Layout
		//    strBody.Append("<!--[if gte mso 9]>");
		//    strBody.Append("<xml>");
		//    strBody.Append("<w:WordDocument>");
		//    strBody.Append("<w:View>Print</w:View>");
		//    strBody.Append("<w:Zoom>100</w:Zoom>");
		//    strBody.Append("<w:DoNotOptimizeForBrowser/>");
		//    strBody.Append("</w:WordDocument>");
		//    strBody.Append("</xml>");
		//    strBody.Append("<![endif]-->"); 
		//    #endregion

		//    #region Estilo
		//    strBody.Append("<style>");
		//    strBody.Append("<!-- /* Style Definitions */");
		//    strBody.Append("p.MsoFooter, li.MsoFooter, div.MsoFooter");
		//    strBody.Append("{margin:0in;");
		//    strBody.Append("margin-bottom:.0001pt;");
		//    strBody.Append("mso-pagination:widow-orphan;");
		//    strBody.Append("tab-stops:center 3.0in right 6.0in;");
		//    strBody.Append("font-size:12.0pt;}");
		//    strBody.Append("p.MsoHeader, li.MsoHeader, div.MsoHeader");
		//    strBody.Append("{margin:0in;");
		//    strBody.Append("margin-bottom:.0001pt;");
		//    strBody.Append("mso-pagination:widow-orphan;");
		//    strBody.Append("tab-stops:center 3.0in right 6.0in;");
		//    strBody.Append("font-size:12.0pt;}");
		//    strBody.Append("@page Section1");
		//    strBody.Append("   {size:8.5in 11.0in; ");
		//    strBody.Append("   margin:1.5in 0.6in 2in 0.6in ; ");
		//    strBody.Append("   mso-header: h1;");
		//    strBody.Append("   mso-header-margin:.5in; ");
		//    strBody.Append("   mso-footer: f1;");
		//    strBody.Append("   mso-footer-margin:.5in; mso-paper-source:0;}");
		//    strBody.Append(" div.Section1");
		//    strBody.Append("   {page:Section1;");
		//    strBody.Append("font-size:10.0pt;font-family:\"Times New Roman\";mso-fareast-font-family:\"Times New Roman\";");
		//    strBody.Append(" }");
		//    strBody.Append("-->");
		//    strBody.Append("</style></head>"); 
		//    #endregion

		//    #region Cabecera
		//    strBody.Append("<body lang=EN-US style='tab-interval:.5in'>");
		//    strBody.Append("<div class=Section1>");
		//    strBody.Append("<img src='http://www.viajesfalabella.cl/dnn/Portals/_default/Skins/viajes/img/lgt/logo.jpg' />");

		//    strBody.Append("<br />");
		//    strBody.Append("<br />");
		//    strBody.Append("<h2>");
		//    strBody.Append(Server.HtmlEncode("N° de Negocio : " + Numero.ToString()));
		//    strBody.Append("</h2>");

		//    strBody.Append("<img src='");
		//    strBody.Append(programaInfo.IMAGEN.IMAGEN_CABECERA);
		//    strBody.Append("' />");
		//    strBody.Append("<br />");

		//    strBody.Append("<h2>");
		//    strBody.Append(Server.HtmlEncode(programaInfo.PROGRAMA.NOMBRE));
		//    strBody.Append("</h2>");
		//    strBody.Append("<h4>");
		//    strBody.Append(programaInfo.PROGRAMA.NRO_DIAS.ToString());
		//    strBody.Append("d&iacute;as / ");
		//    strBody.Append(programaInfo.PROGRAMA.NRO_NOCHES.ToString());
		//    strBody.Append(" noches</h4>"); 

		//    strBody.Append(Server.HtmlEncode( programaInfo.PROGRAMA.GLOSA_ATRIBUTO_PROGRAMA));
		//    #endregion

		//    #region Paquete incluye
		//    strBody.Append("<h3>Paquete incluye:</h3>");

		//    strBody.Append("<ul>");
		//    foreach (var item in programaInfo.INCLUYE)
		//    {
		//        strBody.Append("<li>");
		//        strBody.Append(Server.HtmlEncode(item.GLOSA));
		//        strBody.Append("</li>");
		//    }
		//    strBody.Append("</ul>");

		//    #endregion

		//    #region Precio no incluye
		//            strBody.Append("<h3>Precio no incluye:</h3>");
		//    if (programaInfo.PROGRAMA.COMISION_FEE1_ST == "NO" && programaInfo.PROGRAMA.COMISION_FEE1 > 0)
		//    {
		//        strBody.Append("<p>Comisi&oacute;n de agencia, los que ascienden a <b>");
		//        strBody.Append(Convert.ToInt32( programaInfo.PROGRAMA.COMISION_FEE1).ToString("#,##0"));
		//        strBody.Append("</b> por persona en programas nacionales.</p>");
		//    }

		//    #endregion
			
		//    #region Alternativas de fechas, hoteles y precios
			
		//    strBody.Append("<h3>Alternativas de fechas, hoteles y precios</h3>");
		//    strBody.Append("Precios por persona. ");
		//    strBody.Append(programaInfo.PROGRAMA.TIPO_MONEDA);
		//    strBody.Append(" - ");
		//    strBody.Append(Server.HtmlEncode( programaInfo.PROGRAMA.GLOSA_VALIDEZ)) ;
		//    strBody.Append(programaInfo.PROGRAMA.FECHA_VENTA_HASTA);
		//    strBody.Append("<br />");
		//    strBody.Append("<br />");

		//    if (!programaInfo.TIENE_HOSPEDAJE_HTML)
		//    {
		//        strBody.Append("<table cellspacing=\"0\" style=\"padding:6px\" >");
		//        strBody.Append("<thead>");

		//        // Celdas del encabezado
		//        strBody.Append(CeldaTablaEncebezado("Hotel", false));
		//        strBody.Append(CeldaTablaEncebezado("Vigencias", false));

		//        if (programaInfo.HOSPEDAJE_COLS.show_valor_single)
		//        {
		//            strBody.Append(CeldaTablaEncebezado(Server.HtmlEncode(programaInfo.HOSPEDAJE_COLS.titulo1)
		//                , !programaInfo.HOSPEDAJE_COLS.show_valor_doble
		//                && !programaInfo.HOSPEDAJE_COLS.show_valor_triple
		//                && !programaInfo.HOSPEDAJE_COLS.show_valor_cuadruple
		//                && !programaInfo.HOSPEDAJE_COLS.show_valor_quintuple
		//                && !programaInfo.HOSPEDAJE_COLS.show_valor_sextuple
		//                && !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
		//        }
		//        if (programaInfo.HOSPEDAJE_COLS.show_valor_doble)
		//        {
		//            strBody.Append(CeldaTablaEncebezado(Server.HtmlEncode(programaInfo.HOSPEDAJE_COLS.titulo2)
		//                , !programaInfo.HOSPEDAJE_COLS.show_valor_triple
		//                && !programaInfo.HOSPEDAJE_COLS.show_valor_cuadruple
		//                && !programaInfo.HOSPEDAJE_COLS.show_valor_quintuple
		//                && !programaInfo.HOSPEDAJE_COLS.show_valor_sextuple
		//                && !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
		//        }
		//        if (programaInfo.HOSPEDAJE_COLS.show_valor_triple)
		//        {
		//            strBody.Append(CeldaTablaEncebezado(Server.HtmlEncode(programaInfo.HOSPEDAJE_COLS.titulo3)
		//                                , !programaInfo.HOSPEDAJE_COLS.show_valor_cuadruple
		//                                && !programaInfo.HOSPEDAJE_COLS.show_valor_quintuple
		//                                && !programaInfo.HOSPEDAJE_COLS.show_valor_sextuple
		//                                && !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
		//        }
		//        if (programaInfo.HOSPEDAJE_COLS.show_valor_cuadruple)
		//        {
		//            strBody.Append(CeldaTablaEncebezado(Server.HtmlEncode(programaInfo.HOSPEDAJE_COLS.titulo4)
		//                                , !programaInfo.HOSPEDAJE_COLS.show_valor_quintuple
		//                                && !programaInfo.HOSPEDAJE_COLS.show_valor_sextuple
		//                                && !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
		//        }
		//        if (programaInfo.HOSPEDAJE_COLS.show_valor_quintuple)
		//        {
		//            strBody.Append(CeldaTablaEncebezado(Server.HtmlEncode(programaInfo.HOSPEDAJE_COLS.titulo5)
		//                                , !programaInfo.HOSPEDAJE_COLS.show_valor_sextuple
		//                                && !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
		//        }
		//        if (programaInfo.HOSPEDAJE_COLS.show_valor_sextuple)
		//        {
		//            strBody.Append(CeldaTablaEncebezado(Server.HtmlEncode(programaInfo.HOSPEDAJE_COLS.titulo6)
		//                , !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
		//        }
		//        if (programaInfo.HOSPEDAJE_COLS.show_valor_ninyos)
		//        {
		//            strBody.Append(CeldaTablaEncebezado(Server.HtmlEncode(programaInfo.HOSPEDAJE_COLS.titulo7), true));

		//        }
		//        strBody.Append("</thead>");

		//        foreach (CPPaquetes.BusinessEntities.HospedajeInfo item in programaInfo.HOSPEDAJE)
		//        {
		//            strBody.Append("<tr>");
		//            if (item.HotelShow)
		//            {
		//                strBody.Append(CeldaTablaDetalle(Server.HtmlEncode(item.Nombre), item.HotelSpan, false));

		//            }

		//            strBody.Append(CeldaTablaDetalle(Server.HtmlEncode(item.Vigencia), 0, false));

		//            if (programaInfo.HOSPEDAJE_COLS.show_valor_single)
		//            {
		//                strBody.Append(CeldaTablaDetalle(Server.HtmlEncode(item.valor_single == 0 ? "" : item.valor_single.ToString("#,##0"))
		//                    , 0
		//                    , !programaInfo.HOSPEDAJE_COLS.show_valor_doble
		//                    && !programaInfo.HOSPEDAJE_COLS.show_valor_triple
		//                    && !programaInfo.HOSPEDAJE_COLS.show_valor_cuadruple
		//                    && !programaInfo.HOSPEDAJE_COLS.show_valor_quintuple
		//                    && !programaInfo.HOSPEDAJE_COLS.show_valor_sextuple
		//                    && !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
		//            }
		//            if (programaInfo.HOSPEDAJE_COLS.show_valor_doble)
		//            {
		//                strBody.Append(CeldaTablaDetalle(Server.HtmlEncode(item.valor_doble == 0 ? "" : item.valor_doble.ToString("#,##0"))
		//                    , 0
		//                    , !programaInfo.HOSPEDAJE_COLS.show_valor_triple
		//                    && !programaInfo.HOSPEDAJE_COLS.show_valor_cuadruple
		//                    && !programaInfo.HOSPEDAJE_COLS.show_valor_quintuple
		//                    && !programaInfo.HOSPEDAJE_COLS.show_valor_sextuple
		//                    && !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
		//            }
		//            if (programaInfo.HOSPEDAJE_COLS.show_valor_triple)
		//            {
		//                strBody.Append(CeldaTablaDetalle(Server.HtmlEncode(item.valor_triple == 0 ? "" : item.valor_triple.ToString("#,##0"))
		//                    , 0
		//                    , !programaInfo.HOSPEDAJE_COLS.show_valor_cuadruple
		//                    && !programaInfo.HOSPEDAJE_COLS.show_valor_quintuple
		//                    && !programaInfo.HOSPEDAJE_COLS.show_valor_sextuple
		//                    && !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
		//            }
		//            if (programaInfo.HOSPEDAJE_COLS.show_valor_cuadruple)
		//            {
		//                strBody.Append(CeldaTablaDetalle(Server.HtmlEncode(item.valor_cuadruple == 0 ? "" : item.valor_cuadruple.ToString("#,##0"))
		//                    , 0
		//                    , !programaInfo.HOSPEDAJE_COLS.show_valor_quintuple
		//                    && !programaInfo.HOSPEDAJE_COLS.show_valor_sextuple
		//                    && !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
		//            }
		//            if (programaInfo.HOSPEDAJE_COLS.show_valor_quintuple)
		//            {
		//                strBody.Append(CeldaTablaDetalle(Server.HtmlEncode(item.valor_quintuple == 0 ? "" : item.valor_quintuple.ToString("#,##0"))
		//                    , 0
		//                    , !programaInfo.HOSPEDAJE_COLS.show_valor_sextuple
		//                    && !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
		//            }
		//            if (programaInfo.HOSPEDAJE_COLS.show_valor_sextuple)
		//            {
		//                strBody.Append(CeldaTablaDetalle(Server.HtmlEncode(item.valor_sextuple == 0 ? "" : item.valor_sextuple.ToString("#,##0"))
		//                    , 0
		//                    , !programaInfo.HOSPEDAJE_COLS.show_valor_ninyos));
		//            }
		//            if (programaInfo.HOSPEDAJE_COLS.show_valor_ninyos)
		//            {
		//                strBody.Append(CeldaTablaDetalle(Server.HtmlEncode(item.valor_ninyos == 0 ? "": item.valor_ninyos.ToString("#,##0"))
		//                    , 0
		//                    , true));
		//            }
			
		//        strBody.Append("</tr>");
		//    }
		//    strBody.Append("</table>");
		//    }
		//    else
		//    {
		//        strBody.Append("<div>");
		//        strBody.Append(HtmlHelper.EncodeTildes(programaInfo.HOSPEDAJE_HTML));
		//        strBody.Append("</div>");
		//    }

		//    #endregion
		//    #region TIENE_AEREO
		//    if (programaInfo.TIENE_AEREO)
		//    {
		//        strBody.Append("<div class=\"box_excluye\">");
		//        strBody.Append("<table cellspacing=\"0\" style=\"padding:6px;width:100%\" >");
		//        strBody.Append("<thead>");
		//        strBody.Append(CeldaTablaEncebezado("Valor Terrestre", false));
		//        strBody.Append(CeldaTablaEncebezado("Valor A&eacute;reo", false));
		//        strBody.Append(CeldaTablaEncebezado("Q", false));
		//        strBody.Append(CeldaTablaEncebezado("Tasa", true));
		//        strBody.Append("</thead>");
		//        strBody.Append("<tr>");
		//        strBody.Append(CeldaTablaDetalle(Server.HtmlEncode(programaInfo.PROGRAMA.VALOR_TERRESTRE.ToString()), 0, false));
		//        strBody.Append(CeldaTablaDetalle(Server.HtmlEncode("0"), 0, false));
		//        strBody.Append(CeldaTablaDetalle(Server.HtmlEncode(programaInfo.PROGRAMA.Q.ToString()), 0, false));
		//        strBody.Append(CeldaTablaDetalle(Server.HtmlEncode(programaInfo.PROGRAMA.TASA.ToString()), 0, true));
		//        strBody.Append("</tr>");
		//        strBody.Append("</table>");
		//        strBody.Append("</div>");
		//    } 
		//    #endregion
		//    #region TIENE_CUADRO_VARIABLE
		//    if (programaInfo.TIENE_CUADRO_VARIABLE)
		//    {
		//        int ultCol = 0;
		//        strBody.Append("<br />");
		//        strBody.Append("<div class=\"box_excluye\" >");
		//        strBody.Append("<table id=\"ancla_variable\" cellspacing=\"0\" style=\"padding:6px;width:100%\" border=\"0\">");
		//        if (programaInfo.CUADRO_VARIABLE.NRO_COLUMNAS > 1)
		//        {
		//            strBody.Append("<thead>");
		//            for (int col = 1; col <= programaInfo.CUADRO_VARIABLE.NRO_COLUMNAS; col++)
		//            {
		//                var fila_col = 1 * 10 + col;
		//                CPPaquetes.BusinessEntities.TBL_DETALLE_CUADRO_VARIABLE
		//                    detalle = programaInfo.CUADRO_VARIABLE.TBL_DETALLE_CUADRO_VARIABLE.Where(x => x.FILA_COLUMNA_ID == fila_col).FirstOrDefault();
		//                if (detalle != null)
		//                {
		//                    ultCol = col;
		//                }
		//            }
		//            for (int col = 1; col <= programaInfo.CUADRO_VARIABLE.NRO_COLUMNAS; col++)
		//            {
		//                var fila_col = 1 * 10 + col;
		//                CPPaquetes.BusinessEntities.TBL_DETALLE_CUADRO_VARIABLE 
		//                    detalle = programaInfo.CUADRO_VARIABLE.TBL_DETALLE_CUADRO_VARIABLE.Where(x => x.FILA_COLUMNA_ID == fila_col).FirstOrDefault();
		//                if (detalle != null)
		//                {
		//                    strBody.Append(CeldaTablaEncebezado(detalle.VALOR == "" ? " " : HtmlHelper.EncodeTildes(detalle.VALOR), (col == ultCol)));
		//                }
		//            }
		//            strBody.Append("</thead>");
		//        }
		//        bool filaBlanco = false;
		//        for (int row = 2; row <= programaInfo.CUADRO_VARIABLE.NRO_FILAS; row++)
		//        {
		//            filaBlanco = true;
		//            for (int col = 1; col <= programaInfo.CUADRO_VARIABLE.NRO_COLUMNAS; col++)
		//            {
		//                var fila_col = row * 10 + col;
		//                CPPaquetes.BusinessEntities.TBL_DETALLE_CUADRO_VARIABLE detalle = programaInfo.CUADRO_VARIABLE.TBL_DETALLE_CUADRO_VARIABLE.Where(x => x.FILA_COLUMNA_ID == fila_col).FirstOrDefault();
		//                if (detalle != null && detalle.VALOR != "")
		//                {
		//                    filaBlanco = false;
		//                }
		//            }
		//            if (!filaBlanco)
		//            {
		//                strBody.Append("<tr style='background-color:(row % 2 == 0 ? \"White\" : \"#e7e7e7\")'>");
		//                for (int col = 1; col <= programaInfo.CUADRO_VARIABLE.NRO_COLUMNAS; col++)
		//                {
		//                    var fila_col = row * 10 + col;
		//                    CPPaquetes.BusinessEntities.TBL_DETALLE_CUADRO_VARIABLE detalle = programaInfo.CUADRO_VARIABLE.TBL_DETALLE_CUADRO_VARIABLE.Where(x => x.FILA_COLUMNA_ID == fila_col).FirstOrDefault();
		//                    if (detalle != null)
		//                    {
		//                        strBody.Append(CeldaTablaDetalle(detalle.VALOR == "" ? " " : HtmlHelper.EncodeTildes(detalle.VALOR), 0, (col == ultCol)));
		//                    }
		//                }
		//                strBody.Append("</tr>");
		//            }
		//        }
		//        strBody.Append("</table>");
		//        strBody.Append("</div>");
		//    } 
		//    #endregion

		//    #region Condiciones Generales de este programa
		//    strBody.Append("<h3>Condiciones Generales de este programa</h3>");
		//    strBody.Append("<ul>");

		//    foreach (CPPaquetes.BusinessEntities.ProgramaInfoNota item in programaInfo.NOTAS)
		//    {
		//        strBody.Append("<li>");
		//        if (item.DESTACADO)
		//        {
		//            strBody.Append("<b>");
		//            strBody.Append(Server.HtmlEncode(item.GLOSA));
		//            strBody.Append("</b>");
		//        }
		//        else
		//        {
		//            strBody.Append(Server.HtmlEncode(item.GLOSA));
		//        }
		//        strBody.Append("</li>");
		//    }
		//    strBody.Append("</ul>"); 
		//    #endregion
			
		//    #region Header
		//    //strBody.Append("<div style='mso-element:header' id=h1>");
		//    //strBody.Append(" <p class=MsoHeader>");
		//    //strBody.Append("<table class=\"style1\" width=\"710\" ID=\"TableHeader\" frame=\"box\" border=\"1\" >");
		//    //strBody.Append("<tr>");
		//    //strBody.Append("<td align=\"center\">");
		//    //strBody.Append("<span style=\"font-size: 20pt; font-weight: bold\" >uno</span>");
		//    //strBody.Append("<br />");
		//    //strBody.Append("<span style=\"font-size: 16pt; font-weight: bold\" >dos</span>");
		//    //strBody.Append("<br />");
		//    //strBody.Append("tres");
		//    //strBody.Append("</td>");
		//    //strBody.Append("<td align=\"center\" valign=\"top\">");
		//    //strBody.Append("<span style=\"font-size: 16pt; font-weight: bold\" >cuatro</span>");
		//    //strBody.Append("<br />");
		//    //strBody.Append("<br />");
		//    //strBody.Append("<span style=\"font-size: 16pt; font-weight: bold\" >cinco</span>");
		//    //strBody.Append("</td>");
		//    //strBody.Append("</tr>");
		//    //strBody.Append("</table>");
		//    //strBody.Append("<p style=\"font-size: 24pt; font-weight: bold\" > <span style='mso-tab-count:5'></span>seis</p>");
		//    //strBody.Append("<hr size=1 width=\"100%\" align=center>");
		//    //strBody.Append(" </p></div>");

		//    #endregion


		//    strBody.Append("</div></body></html>") ;

		//    //Force this content to be downloaded 
		//    //as a Word document with the name of your choice
		//    Response.AppendHeader("Content-Type", "application/msword");
		//    Response.AppendHeader ("Content-disposition", "attachment; filename=cotizacion_viajes_falabella.doc");
		//    Response.Write(strBody);
		//}

		#endregion
		//
		// GET: /Home/ShowFileWord
		public ActionResult ShowFileWord(string FileName, string OpcionMenu)
		{
			string PathWordFile = "";
			string MimeType = string.Empty;
			FileStream fs = null;
			List<ItemMenu> itemsMenu = MenuConfiguration.Read();
			ItemMenu item = GetItemMenu(OpcionMenu, itemsMenu);
            
			PathWordFile = item.PathFile + "\\" + HttpUtility.UrlDecode(FileName);
			//PathWordFile = item.PathFile + "\\" + FileName;
			fs = new FileStream(PathWordFile, FileMode.Open, FileAccess.Read);

			FileInfo fi = new FileInfo(PathWordFile);
			switch (fi.Extension)
			{
				case ".doc": MimeType = "application/ms-word";
					break;
				case ".xls": 
				case ".xlsx" : MimeType = "application/vnd.ms-excel";
					break;
				case ".pptx":
				case ".ppt": MimeType = "application/vnd.ms-powerpoint";
					break;
				case ".pdf": MimeType = "application/pdf";
					break;
				case ".txt": MimeType = "application/txt";
					break;
				case ".jpg": MimeType = "application/jpg";
					break;
				case ".gif": MimeType = "application/gif";
					break;
				case ".bmp": MimeType = "application/bmp";
					break;
			}


			FileStreamResult fsr = new FileStreamResult(fs, MimeType);
            fsr.FileDownloadName = HttpUtility.UrlEncode(fi.Name);
			return fsr;
		}
		//
		// GET: /Home/InfoCotizador
		public ActionResult InfoCotizador(int Id )
		{
			InfoProgramaWord programaWord = new InfoProgramaWord();
			programaWord.PROGRAMAID = Id;
			return PartialView(programaWord);
		}

		//
		// POST: /Home/InfoCotizador
		[HttpPost]
		public ActionResult InfoCotizador(InfoProgramaWord programaWord)
		{
			Programa programa = new Programa();
			ProgramaInfo programaInfo = programa.GetProgramaInfoById(programaWord.PROGRAMAID);
			//string url = Url.Content("~/Home/ShowProgramaWord?Id=" + programaWord.PROGRAMAID.ToString());
			
								
			string ParameterData = string.Empty;
						
			string Moneda = "C";//programaInfo.PROGRAMA.TIPO_MONEDA;
			string DescripcionServicio = programaWord.PROGRAMAID.ToString() + " - " + programaInfo.PROGRAMA.NOMBRE;
			int Numero = 0;

			try
			{
				DispatcherHandler dispatcherHandler = new DispatcherHandler();

				ContextParameter context = ContextParameter.GetDataContext(this);

				if (context == null)
					return RedirectToAction("ErrorSession");

				Numero = dispatcherHandler.CrearNegocio(context.IdSucursal
							, context.IdVendedor
							, context.IdCanal
							, programaWord.NOMBRE
							, programaWord.TELEFONO
							, programaWord.MAIL
							, Moneda
							, DescripcionServicio
							, programaWord.PROGRAMAID
							, programaWord.FECHA_IN
							, programaWord.MONTO);

			}
			catch (Exception ex)
			{
				LogManager.Instance().Error(ex);
				
			}

			string url = Url.Content("~/Home/ShowProgramaWord?Id=" + programaWord.PROGRAMAID.ToString() 
								+ "&NOMBRE=" + programaWord.NOMBRE
								+ "&TELEFONO=" + programaWord.TELEFONO
								+ "&MAIL=" + programaWord.MAIL
								+ "&NUMERONEGOCIO=" + Numero.ToString());
			Uri requestUrl = Url.RequestContext.HttpContext.Request.Url;


			string absoluteUrl = string.Format("{0}://{1}{2}",
												  requestUrl.Scheme,
												  requestUrl.Authority,
												  url);

			return new WordActionResult(absoluteUrl, "cotizacion.doc");
		}

		#region CeldaTablaEncebezado
		private string CeldaTablaEncebezado(string Texto, bool UltimaColumna)
		{
			StringBuilder sb = new StringBuilder("<td style=\"border-left: 1px black solid; border-bottom:1px black solid;border-top:1px black solid;background-color: #CCCCCC");
			
			if (UltimaColumna)
				sb.Append(";border-right:1px black solid"); 
			sb.Append("\" >" );
			sb.Append(Texto);
			sb.Append("</td>");
			return  sb.ToString();
		}
		#endregion

		#region CeldaTablaDetalle
		private string CeldaTablaDetalle(string Texto, int SpanRow, bool UltimaColumna)
		{
			StringBuilder sb = new StringBuilder("<td style=\"border-left: 1px black solid; border-bottom:1px black solid");

			if (UltimaColumna)
				sb.Append(";border-right:1px black solid");

			if (SpanRow > 1)
			{
				sb.Append("\" rowspan=\"");
				sb.Append(SpanRow.ToString());
				sb.Append("\" >");
			}
			else
			{
				sb.Append("\" >");
			}

			sb.Append(Texto);
			sb.Append("</td>");
			return sb.ToString();
		}
		#endregion
	}
}